package main

import (
	"fmt"
	"math"
	"strings"
)

//	BinaryFormat的函数功能是输出一个int32对应的二进制表示
//解题思路： 利用c都为1的特性，将a与c进行与（&）运算，同则1，则判断条件为a&c结果大于0，则字符串返回1，否则0；移动一次后，将c进行右移，重新进行与运算，直至32次循环完毕
//	3 00000011
//	c 11111111
//	d 01111111 将c右移一位为d
//	r 00000011
//	BinaryFormat返回的结果理论推算结果为r：00000011
func BinaryFormat(n int32) string {
	a := uint32(n)
	sb := strings.Builder{}
	c := uint32(math.Pow(2, 31))
	for i := 0; i < 32; i++ {
		if (a & c) > 0 {
			sb.WriteString("1")
		} else {
			sb.WriteString("0")
		}
		c >>= 1
	}
	return sb.String()
}

/*
swh@sunweihuadeMacBook-Pro [~/private/gitee/goedu/class01] (master) ~$ go run work.go
01
00000000000000000000000000000011
00000000000000000000000000000110
00000000000000000000000000000111
11111111111111111111111111111001
*/
func main() {
	fmt.Printf("%v\n", 3&1)
	fmt.Println(BinaryFormat(3))
	fmt.Println(BinaryFormat(6))
	fmt.Println(BinaryFormat(7))
	fmt.Println(BinaryFormat(-7))

}
